package com.dzm;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

/**
 * 作者：Dzm
 * 时间：2024-07-13-9:02
 * 功能：
 */
public class Test01 {

    public static void main(String[] args) {
        //用户输入时间
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入时间（yyyy-MM-dd）：");
        String str = scanner.next();

        help(str);
    }

    /**
     * 根据所学的java类库，设计一个方法，随机输入一个日期（例如2020-3-15）后，得
     * 到该日期对应星期几，距离下个月的1日（2020-3-15）还有多少天。（10分）
     * 1）得到该日期对应星期几，正确 5分；
     * 2）距离下个月的1日（2020-3-15）还有多少天，正确 5分
     *      分析：
     *          ① 将用户输入时间转为时间，并获取年月日
     *          ② 新建一个日历对象，并设置时间
     *          ③ 获取星期几
     *          ④ 通过计数器统计到下个月天数，循环加1天
     * @param str
     */
    private static void help(String str) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        try {
            //时间转换，并获取时间
            Date date = sdf.parse(str);
            int year = date.getYear() + 1900;
            int month = date.getMonth();
            int day = date.getDate();

            //创建日历对象，并设置时间
            Calendar calendar = Calendar.getInstance();
            calendar.set(year, month, day);

            //获取星期几
            String week = getWeek(calendar);
            System.out.println(str + "是" + week);

            //获取距离下个月的日期
            int count = dayOfNextMonth(month, calendar);
            System.out.println("距离下个月的1日还剩：" + count + "天");


        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    private static int dayOfNextMonth(int month, Calendar calendar) {
        //用于统计距离下一个月的天数
        int count = 0;
        while (true) {
            //月份变化则退出
            if(calendar.get(Calendar.MONTH) != month) {
                break;
            }

            count++;
            calendar.add(Calendar.DATE, 1);
        }
        return count;
    }

    //根据日历获取星期
    private static String getWeek(Calendar calendar) {
        int i = calendar.get(Calendar.DAY_OF_WEEK);
        switch (i) {
            case 1:
                return "星期天";
            case 2:
                return "星期一";
            case 3:
                return "星期二";
            case 4:
                return "星期三";
            case 5:
                return "星期四";
            case 6:
                return "星期五";
            case 7:
                return "星期六";
        }
        return null;
    }


}
